using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.Contracts;
using Boa.HD.AccesoDatos.Entidades;
using Boa.HD.AccesoDatos.Contratos;

namespace Boa.HD.AccesoDatos.Contexto
{
   public class HD_SolicitudAsistenciaAccesoDatos : DataAccessBase<HD_SolicitudAsistencia>, IHD_SolicitudAsistenciaAccesoDatos
   {
     public HD_SolicitudAsistenciaAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<HD_SolicitudAsistencia> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<HD_SolicitudAsistencia> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(HD_SolicitudAsistencia));
             criteria.Add(Expression.Like("DescripcionProblema", filtro + "%")); 
             return criteria.List<HD_SolicitudAsistencia>();
     }


     public IList<HD_SolicitudAsistencia> SolicitudesDeEmpleado(int empleadoId)
     {
         var hql = @"from HD_SolicitudAsistencia sa
                       where sa.EmpleadoId = :empleadoId
                       order by sa.FechaRegistro desc";
         var query = Session.CreateQuery(hql);
         query.SetInt32("empleadoId", empleadoId);
         return query.List<HD_SolicitudAsistencia>();
     }


     public IList<HD_SolicitudAsistencia> SolicitudesDeEmpleado(int empleadoId, int Mes, int Anio)
     {

         var hql = @"from HD_SolicitudAsistencia sa 
                     where sa.EmpleadoId = :empleadoId 
                           AND YEAR(sa.FechaRegistro) = :Anio 
                           AND MONTH(sa.FechaRegistro) = :Mes";

         var query = Session.CreateQuery(hql);
         query.SetInt32("empleadoId", empleadoId);
         query.SetInt32("Mes", Mes);
         query.SetInt32("Anio", Anio);
         return query.List<HD_SolicitudAsistencia>();


     }
   }
}

